In today's society, it is quite common for a person to call a business, such as a bank, and reach an interactive voice response (IVR) system. Typically, such an IVR system prompts the caller to enter certain information, such as an account number and personal identification number (PIN). The IVR system may then check this information against a database and, depending on information stored within the database, may provide relevant information or may prompt the caller to select an available transaction.
For example, after entering valid account and PIN numbers, as verified through comparison with a database, a caller may indicate that he or she wishes to determine the balance of a savings account. Once the caller indicates this choice, the IVR will retrieve the information from the proper database and communicate it to the caller.
After completing a transaction, the caller is typically prompted for a follow up option. Such follow up options might include the choice of speaking to an account representative. Upon selection of this option, the caller will eventually be connected with an account representative, possibly through an automatic call distribution (ACD) system coupled to the IVR system.
Typically, service of the caller by the account representative requires some of the same information previously provided the IVR and/or its coupled devices by the caller. For example, the account representative might require the caller's name, PIN, and account number. Accordingly, the caller is forced to resupply the information that was previously input to the IVR system. This repetition causes unnecessary delay to the parties involved as well as increasing the possibility of an error in the communication of such information.
In typical prior art IVR systems there are technical reasons that the caller must resupply previously entered information at subsequent points in the call flow. Generally, the hardware that manages incoming calls is divided into a number of discrete components connected via communications links. Each component operates substantially independent of the others to perform a specific function. For example, a private branch exchange (PBX) may initially route the incoming call to the IVR system which in turn sends database queries to a database server in response to caller input. When the caller indicates that he or she wants to speak to an account representative, the PBX, possibly in conjunction with an ACD, routes the call to a telephone used by the account representative and to a computer-telephony integrated (CTI) server controlling the account representative's computer terminal.
Generally, each component is controlled by its own call flow script to result in essentially a state machine that transitions according to the caller's input. A call flow script must be written and compiled for each such component since each component possesses different capabilities and features to perform the various aspects of a call flow.
Accordingly, each component involved in handling a call acts as its own "island." Since each component requires its own call flow script, there are few, if any, provisions for passing data among the components. Since each component is independent, short of a single high level device controlling each component, there is no uniform way to pass variable data, such as an account number, among the various autonomous components. As a result, both the caller and callee are inconvenienced when the caller is forced to enter redundant information into IVR systems and the like.
The use of the above described autonomous components to achieve a desired call flow, although presenting a limitation to passing data among the components, has advantages associated with a distributed system. By distributed system it is meant that separate components are responsible for specific functions.
An advantage presented by a distributed system includes system fault tolerance, i.e., if a single component fails only its functionality is compromised and additional aspects of the call handling system remain available to service a caller. Where a single device is utilized to provide, or a single high level device is utilized to control, all aspects of a call flow, the failure of such a device renders the system totally inoperable. Additionally, unrelated or dissimilar components, i.e., produced by different manufacturers or from differing model lines, may be interconnected to provide the desired aspects of a call flow. For example, features not available on one manufacturer's equipment or model line may be realized through the use of another manufacturer's equipment including the feature.
Thus, there is a need in the art for the ability to pass data among various components used to control a telephone call.
There is a further need in the art for the ability to interconnect dissimilar components to comprise the various components used to control a telephone call while maintaining the ability to pass data among them.
There is also a need for a scripting language that can be used to script the call flows of the various components.
More specifically, there is a need in the art for a development environment that can be used in a device-independent manner to script a call flow from start to finish.
There is a still further need in the art for the development environment to consider attributes of the various components in order optimize their interaction in the call flow.